 
Ext.Loader.setConfig({enabled: true});
Ext.Loader.setPath('administracion', 'static/combos/componentes/administracion');


Ext.require([
    'Ext.data.*',
    'Ext.tip.QuickTipManager',
    'Ext.window.MessageBox',
    'Ext.grid.*',
    'Ext.tab.*',
    'Ext.window.*',
    'Ext.tip.*',
    'Ext.layout.container.Border',
    'Ext.dd.*',
    'Ext.form.field.ComboBox',
    'administracion.UsuariosForm',
    'administracion.UsuariosGrid',
    'Ext.form.FieldSet'
]);


Ext.define('DataObject', {
    extend: 'Ext.data.Model',
    fields: ['nombreRol']
});

Ext.onReady(function(){
    Ext.tip.QuickTipManager.init();
    
		function getPermisos()
		{
			Ext.Ajax.request({
					url: 'listarPermisos_Logueado',
					method: 'GET',
					success: function(response) {
						var jsonData = Ext.JSON.decode(response.responseText);
						var resultMessage = jsonData['data'];
						if(extraer(resultMessage,'{','crear-usuario')){	
							win.child('#form').down('#nuevo').enable();
							win.child('#form').down('#nuevo').show();
						
						}
						if(extraer(resultMessage,'{','eliminar-usuario')){	
							win.child('#form').down('#delete').enable();
							
						}
						if(extraer(resultMessage,'{','modificar-usuario')){	
							win.child('#form').down('#editar').enable();
							
						}
						if(extraer(resultMessage,'{','asignar-rol')){	
							win.child('#form').down('#rol').enable();
							
						}												
						
					}
			});
		}
	
    var storeRol = Ext.create('Ext.data.Store', {
        model: 'modeloRol',
        autoLoad: true,
        proxy: {
            type: 'ajax',
            url: 'listarRoles',
            reader: {
                type: 'json',
                successProperty: 'success',
                root: 'data',
                messageProperty: 'message'
            },
            writer: {
                type: 'json',
                writeAllFields: false,
                root: 'data'
            },

        }        
        
    });
    
    var store = Ext.create('Ext.data.Store', {
        model: 'ModeloUsuarios',
        //autoLoad: true,
        //autoSync: true,
        proxy: {
            type: 'ajax',
            url: 'listarUsuarios',
            reader: {
                type: 'json',
                successProperty: 'success',
                root: 'data',
                messageProperty: 'message'
            },
            
        },        
        
        sorters: [{
            property: 'id',
            direction: 'ASC'
        }]        
    });
   
			win = Ext.create('widget.panel', {
				renderTo: 'comboUsuarios',
				frame: true,
				iconCls: 'icon-alpha',
				title: 'ADMINISTRACION - USUARIOS',
                width: 1050,
                height: 390,
                layout: 'border',
                //bodyStyle: 'padding: 3px;',
				y: 30,
				x: 160,
                items: [{
                    region: 'west',
					xtype: 'UsuariosForm',
					itemId: 'form',
					width: 340,
					listeners: {
						refresh: function() {
							win.child('#grid').onRefresh();
							
						},
						reset: function() {
							win.child('#grid').getSelectionModel().clearSelections();
							
						},
						buscar: function(data) {
							nombreUsuario = extraer(data, '&nombreUsuario=', '&nombre=');		id = extraer(data, 'id=', '&');
							nombre= extraer(data, '&nombre=', '&apellido='); apellido= extraer(data, '&apellido=', '&telefono='); 
							telefono= extraer(data, '&telefono=', '&nroDocumento='); nroDocumento= extraer(data, '&nroDocumento=', '&email=');
							email= extraer(data, '&email=', '&fechaCreacion='); 
							fechaCreacion= extraer(data, '&fechaCreacion=', '&password1='); 
							
							//busqueda = '$1$' + nombreUsuario + '$2$' + nombre + '$3$' + apellido + '$4$' + telefono + '$5$' + nroDocumento + '$6$' + email ;
							/*
							Ext.Msg.show({ 		title: '<br><p align="center"><b>ALPHA MANAGER</b></p>', //<- el título del diálogo  
												msg: busqueda, 	icon: 'ext-mb-ok',
										});*/
							if(email==='') email='nulo';
							if(nombreUsuario==='') nombreUsuario='nulo';
							if(nombre==='') nombre='nulo';
							if(apellido==='') apellido='nulo';
							if(fechaCreacion==='') fechaCreacion='nulo';
							if(telefono==='') telefono='999999';
							if(nroDocumento==='') nroDocumento='999999';
							win.child('#grid').store.setProxy({
																type: 'ajax',
																url: 'buscar_usuarios/' + nombreUsuario + '/' + nombre + '/' + apellido + '/' + telefono + '/' + nroDocumento + '/' + email + '/' + fechaCreacion ,
																reader: {
																	type: 'json',
																	successProperty: 'success',
																	root: 'data',
																	messageProperty: 'message'
																},
															
															});
							win.child('#grid').onRefresh();
							
						},
						listar: function() {
							
							win.child('#grid').store.setProxy({
																type: 'ajax',
																url: 'listarUsuarios',
																reader: {
																	type: 'json',
																	successProperty: 'success',
																	root: 'data',
																	messageProperty: 'message'
																},
															
															});
							win.child('#grid').onRefresh();
							
						},
						roles: function(data){
							var grid1, grid2;
							nombre = extraer(data, '&nombreUsuario=', '&nombre=');		id = extraer(data, 'id=', '&');
                            win2 = Ext.create('widget.window', {
								iconCls: 'icon-rol',
								x: 400, y: 260,
								title: 'Drag and Drop - Asignar/Desasignar roles al usuario: ' + nombre,
								closable: false,
								plain: true,
								layout: 'fit',
								items: [displayPanel = Ext.create('Ext.Panel', {
											width : 550,	height : 250,
											layout  : {	type: 'hbox',	align: 'stretch'	},
											defaults  : { flex : 1 }, 
											items : [
													grid1 = Ext.create('Ext.grid.Panel', {
														multiSelect: true,
														viewConfig: {
															plugins: {
																	ptype: 'gridviewdragdrop',
																	dragGroup: 'firstGridDDGroup',
																	dropGroup: 'secondGridDDGroup'
															},
														},
														store: Ext.create('Ext.data.Store', {
																	model: 'DataObject',
																	autoLoad: true,
																	proxy: {
																		type: 'ajax',
																		url: 'listarNoRoles_Usuario/'+ id,
																		reader: {
																			type: 'json',
																			successProperty: 'success',
																			root: 'data',
																			messageProperty: 'message'
																		},
																	
																	}      
																}),
														columns:  [ {text: "<b>Roles No Asignados</b>", flex: 1, sortable: true, dataIndex: 'nombreRol'} ],
														stripeRows : true
													}),
													grid2 = Ext.create('Ext.grid.Panel', {
														multiSelect: true,
														viewConfig: {
															plugins: {
																	ptype: 'gridviewdragdrop',
																	dragGroup: 'secondGridDDGroup',
																	dropGroup: 'firstGridDDGroup'
																},
														},
														store: Ext.create('Ext.data.Store', {
																model: 'DataObject',
																autoLoad: true,
																proxy: {
																	type: 'ajax',
																	url: 'listarRoles_Usuario/'+ id,
																	reader: {
																		type: 'json',
																		successProperty: 'success',
																		root: 'data',
																		messageProperty: 'message'
																	},
																	
																}       
														}),
														columns  : [ {text: "<b>Roles Asignados</b>", flex: 1, sortable: true, dataIndex: 'nombreRol'} ],
														stripeRows : true
													
													})
											],
											dockedItems: {
												xtype: 'toolbar',
												dock: 'bottom',
												items: ['->', // Fill
												{
													text: 'Guardar',
													iconCls: 'icon-save',
													handler: function(){
														grid2.getSelectionModel().selectAll();
														longitud= grid2.getSelectionModel().getSelection().length;
														lista_roles = new Array(longitud);
														i=0;
														while(i < longitud)
														{											
															lista_roles[i]=grid2.getSelectionModel().getSelection()[i].data['nombreRol'];
															i=i+1;
														}	
														grid2.getSelectionModel().deselectAll();											
														Ext.Ajax.request({
															url: 'asignarRoles_desdeABMUsuarios',
															params: {
																id_usuario: id,
																lista_roles:Ext.encode(lista_roles)
															},
															success: function() {
																Ext.Msg.show({ 		title: '<br><p align="center"><b>ALPHA MANAGER</b></p>', //<- el título del diálogo  
																					msg: 'Roles asignados correctamente', 	icon: 'ext-mb-ok',
																});	
															},
															failure: function() {
																Ext.Msg.show({	title: '<br><p align="center"><b>ALPHA MANAGER</b></p>',   
																				msg: 'Error en la asignacion de roles', 	icon: 'ext-mb-error',
																});
															}
														})
													}
												},
												{
													text: 'Cerrar',
													iconCls: 'icon-cerrar',
													handler: function(){win2.close()}
												}]
											}
									}),{
									border: false
								}]
							});					
							win2.show();	

						}
					}
				}, {
                    region: 'center',
					xtype: 'UsuariosGrid',            
					itemId: 'grid',
					title: 'Lista de Usuarios ',
					flex: 1,        
					store: Ext.create('Ext.data.Store', {
														model: 'ModeloUsuarios',
														autoLoad: true,
														//autoSync: true,
														proxy: {
															type: 'ajax',
															url: 'listarUsuarios',
															reader: {
																type: 'json',
																successProperty: 'success',
																root: 'data',
																messageProperty: 'message'
															},
															
														},        
														
														sorters: [{
															property: 'id',
															direction: 'ASC'
														}]        
													}),
					listeners: {
						selectionchange: function(selModel, selected) {
							win.child('#form').setActiveRecord(selected[0] || null);
						},
						listarTodo: function() {
							win.child('#form').onListar();
							win.child('#form').onReset();
							
						},
						buscar: function() {
							win.child('#form').onFiltrar();
						}
					}
				}		
				]
            });
            
            win.show();
            getPermisos();
            
    
});

    function extraer(texto, etqini, etqfin)
	{
		var ind0, ind1, parte ="";
		ind0 = texto.indexOf(etqini);
		if (ind0 >=0)
		{
			ind1 = texto.indexOf(etqfin);
		if (ind1>ind0)
			parte = texto.substring(ind0+etqini.length, ind1);
		}
		return parte;
	}

